﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BBMS.DLL.Forms.Base;
using BBMS.DLL.DataContract;
using BBMS.DLL.Base;

namespace BBMS.DLL.Forms.Catalog
{
    public partial class frmUserUpdate : Base.FrmEditBase
    {
        public frmUserUpdate(BBMS.DLL.Base.ObjectBase obj)
        {
            InitializeComponent();
            curObj = obj;
        }
        public new static readonly string FunctionKey = "DMNhanVien";
        protected override string GetFunctionKey() { return "DMNhanVien"; }

        protected override void OnLoad()
        {
            if (curObj != null)
            {
                txtUserName.Text = ((NhanVien)curObj).UserName;
                txtFullName.Text = ((NhanVien)curObj).FullName;
                chkIsResetPassword.Checked = false;
                txtPassword.ReadOnly = true;
                txtRetypePassword.ReadOnly = true;
                DateTime? birthDay = (DateTime?)((NhanVien)curObj).Birthday;
                if (birthDay != null)
                    dtpBirthDay.Value = (DateTime)birthDay;
                txtMobile.Text = ((NhanVien)curObj).Mobile;
                txtPhone.Text = ((NhanVien)curObj).Phone;
                txtDepartment.Text = ((NhanVien)curObj).Department;
                txtPosition.Text = ((NhanVien)curObj).Position;
                txtEmail.Text = ((NhanVien)curObj).Email;
                txtFullName.Focus();
                txtUserName.ReadOnly = true;

                if (!Config.CurUser.HaveRole(Role.Edit, GetFunctionKey()))
                {
                    txtUserName.ReadOnly = true;
                    btnSaveNew.Enabled = false;
                    btnReset.Enabled = false;
                    btnSaveClose.Enabled = false;
                }
            }
            else
            {
                Reset();
                txtUserName.Focus();
            }
        }

        protected override ObjectBase GetEditedObject()
        {
            if (txtUserName.Text.Trim().Length == 0)
            {
                MessageBox.Show("Hãy nhập tên đăng nhập.");
                txtUserName.Focus();
                return null;
            }

            if (txtUserName.Text.Trim().Length <2)
            {
                MessageBox.Show("Tên đăng nhập phải có ít nhất 2 kí tự trở lên");
                txtUserName.Focus();
                return null;
            }

            if (txtFullName.Text.Trim().Length == 0)
            {
                MessageBox.Show("Hãy nhập tên đầy đủ.");
                txtUserName.Focus();
                return null;
            }

            string password = "";

            if (chkIsResetPassword.Checked == true)
            {
                if (txtPassword.Text.Trim().Length == 0)
                {
                    MessageBox.Show("Hãy nhập mật khẩu.");
                    txtPassword.Focus();
                    return null;
                }

                if (txtRetypePassword.Text.Trim().Length == 0)
                {
                    MessageBox.Show("Hãy nhập mật khẩu nhập lại.");
                    txtRetypePassword.Focus();
                    return null;
                }

                if (txtRetypePassword.Text.Trim() != txtPassword.Text.Trim())
                {
                    MessageBox.Show("Mật khẩu và mật khẩu nhập lại phải khớp nhau.");
                    txtRetypePassword.Focus();
                    return null;
                }

                password = MD5Crypt.crypt(txtPassword.Text.Trim(), txtPassword.Text.Trim().Substring(0, 1) + txtPassword.Text.Trim().Substring(txtPassword.Text.Trim().Length - 1, 1));
            }

            if (curObj == null || curObj.Key == null)
            {
                if (chkIsResetPassword.Checked == true)
                {
                    if (txtPassword.Text.Trim().Length == 0)
                    {
                        MessageBox.Show("Hãy nhập mật khẩu.");
                        txtPassword.Focus();
                        return null;
                    }

                    if (txtRetypePassword.Text.Trim().Length == 0)
                    {
                        MessageBox.Show("Hãy nhập mật khẩu nhập lại.");
                        txtRetypePassword.Focus();
                        return null;
                    }

                    if (txtRetypePassword.Text.Trim() != txtPassword.Text.Trim())
                    {
                        MessageBox.Show("Mật khẩu và mật khẩu nhập lại phải khớp nhau.");
                        txtRetypePassword.Focus();
                        return null;
                    }

                    password = MD5Crypt.crypt(txtPassword.Text.Trim(), txtPassword.Text.Trim().Substring(0, 1) + txtPassword.Text.Trim().Substring(txtPassword.Text.Trim().Length - 1, 1));
                }
                else
                {
                    MessageBox.Show("Hãy nhập mật khẩu.");
                    chkIsResetPassword.Focus();
                    return null;
                }
            }

            int id = 0;

            if (password == "")
            {
                password = ((NhanVien)curObj).Password;
                //id = ((NhanVien)curObj).ID; 
            }
            if (curObj != null)
            {
                if (curObj.Key == null) id = ((NhanVien)curObj).ID;
            }
            return new NhanVien(id,
                                txtUserName.Text.Trim(),
                                txtFullName.Text.Trim(),
                                (DateTime?)dtpBirthDay.Value,
                                password,
                                txtPhone.Text.Trim(),
                                txtMobile.Text.Trim(),
                                txtDepartment.Text.Trim(),
                                txtPosition.Text.Trim(),
                                txtEmail.Text.Trim());
        }

        protected override void Reset()
        {
            txtUserName.ReadOnly = false;
            txtUserName.Text = "";
            chkIsResetPassword.Checked = true;
            txtPassword.Text = "";
            txtRetypePassword.Text = "";
            txtPassword.ReadOnly = false;
            txtRetypePassword.ReadOnly = false;
            txtFullName.Text = "";
            dtpBirthDay.Value = new DateTime(1980, 01, 01);
            txtPhone.Text = "";
            txtMobile.Text = "";
            txtEmail.Text = "";
            txtDepartment.Text = "";
            txtPosition.Text = "";
          

            txtUserName.Focus();

            if (curObj != null) OnLoad();

        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            OnClose();
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            Reset();
        }

        private void btnSaveNew_Click(object sender, EventArgs e)
        {
            OnSaveAndNew();
        }

        private void btnSaveClose_Click(object sender, EventArgs e)
        {
            OnSaveAndClose();
        }

        private void chkIsResetPassword_CheckedChanged(object sender, EventArgs e)
        {
            if (chkIsResetPassword.Checked)
            {
                txtPassword.ReadOnly = false;
                txtRetypePassword.ReadOnly = false;
            }
            else
            {
                txtPassword.ReadOnly = true;
                txtRetypePassword.ReadOnly = true;
            }
        }
    }
}
